/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.comprasPublicas.dao;

import br.com.comprasPublicas.daogenerico.interfaces.IDAOGenerico;
import br.com.comprasPublicas.entity.Departamento;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import br.com.comprasPublicas.util.HibernateUtil;
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Rapha
 */
public class DAOGenerico<Objeto> implements IDAOGenerico {

    private final Session sessao;
    Transaction transacao = null;
    private Objeto objeto;

    Departamento departamento = new Departamento();

    public DAOGenerico(Objeto objeto)
    {
        this.sessao = HibernateUtil.getSessao();
        this.objeto = objeto;
    }

    public boolean inserir() {
        try
        {
            transacao = sessao.beginTransaction();
            sessao.save(objeto);
            executa_transacao();
            return Boolean.TRUE;
        }
        catch(HibernateException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na inserção "+erro);
            transacao.rollback();
        }
        return Boolean.FALSE;
    }

    public boolean excluir() {
        try
        {
            transacao = sessao.beginTransaction();
            sessao.delete(objeto);
            executa_transacao();
            return Boolean.TRUE;
        }
        catch(HibernateException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na exclusão - Existe algum registro utilizando este cadastro");
            transacao.rollback();
        }
        return Boolean.FALSE;
    }

    public boolean atualizar() {
        try
        {
            transacao = sessao.beginTransaction();
            sessao.update(objeto);
            executa_transacao();
            return Boolean.TRUE;
        }
        catch(HibernateException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na atualização "+erro);
            transacao.rollback();
        }
        return Boolean.FALSE;
    }

    

    public List executa_query(String parametro) {

        transacao = sessao.beginTransaction();
        Query select = sessao.getNamedQuery(parametro);
        List objetos = select.list();
        executa_transacao();

        return objetos;
    }


    public void executa_transacao()
    {
        transacao.commit();
        sessao.close();
    }

    }

